package com.deyuanyun.pic.settings.domain.util;

import java.util.Comparator;

/**
 * 1：用于比较domain对象是否相同，主要是根据id字段来做的。
 *      可能重写equals会更加合理一些，但是domain是自动生成的，单独挨个重写略显麻烦了。
 *      
 * 2：可用于一些排序，或list中查找对象之类的语句中。
 * 
 *  默认构造方法，为按照id字段比较。
 * 
 * @date 2016-04-06
 * @author ChenKui
 *
 * @param <T> domain类，必须要有id字段
 */
@SuppressWarnings("all")
public class DomainComparator<T> implements Comparator<T> {

    private String fieldName;
    public DomainComparator(String fieldName){
        this.fieldName = fieldName;
    }
    
    public DomainComparator(){
        this.fieldName = "id";
    }
    
    @Override
    public int compare(T o1, T o2) {
        
        Object v1 = DomainFieldReflectUtil.getFieldValue(o1, fieldName);
        Object v2 = DomainFieldReflectUtil.getFieldValue(o2, fieldName);
        if(v1 == null || v2 == null){
            //此处可能更应该用断言来判断，但是在工具类中用业务断言，这个有点怪怪的。
            throw new RuntimeException("compare v1 is null or v2 is null");
        }
        
        if(v1 instanceof Comparable && v2 instanceof Comparable){
            return ((Comparable)v1).compareTo(v2);
        }else{
            throw new RuntimeException(v1.getClass() + "Not implemented java.util.Comparable ");   
        }
        
    }

    
}
